/*********************************************************************************
 * 文件名称: aliyun_iot_common_md5.c
 * 作       者:
 * 版       本:
 * 日       期: 2016-05-30
 * 描       述:
 * 其       它:
 * 历       史:
 **********************************************************************************/
#include <stdlib.h>
#include <string.h>
#include "md5.h"
#include "aliyun_iot_common_datatype.h"
#include "aliyun_iot_common_log.h"
#include "aliyun_iot_common_error.h"
#include "aliyun_iot_common_md5.h"

#define MD5_DIGEST_SIZE 16

INT8 aliyun_iot_common_hb2hex(UINT8 hb)
{
    hb = hb & 0xF;
    return (INT8) (hb < 10 ? '0' + hb : hb - 10 + 'A');
}

/***********************************************************
 * 函数名称: aliyun_iot_common_md5
 * 描       述: md5算法接口
 * 输入参数: dat 输入数据指针
 * 输出参数: result
 * 返 回  值: VOID
 * 作       者:
 * 其       它:
 ************************************************************/
VOID aliyun_iot_common_md5(const INT8 *dat, INT32 datlen, INT8 *result)
{
    UINT8 out[MD5_DIGEST_SIZE];
    memset(out, 0, MD5_DIGEST_SIZE);
    UINT32 i = 0;

    mbedtls_md5((UINT8 *)dat, datlen, out);

    for (i = 0; i < MD5_DIGEST_SIZE; ++i)
    {
        result[i * 2] = aliyun_iot_common_hb2hex(out[i] >> 4);
        result[i * 2 + 1] = aliyun_iot_common_hb2hex(out[i]);
    }
}

